package com.deco.back.tags;

import freemarker.core.Environment;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.BeansWrapperBuilder;
import freemarker.template.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Map;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 *      参数信息
         pWidth:不输默认为400
         pHeight：默认和宽度一样
         domain:图片访问url
         titlelabelnm：上传的描述
         previewlabelnm：预览的描述
         multifiles:是否为多个 默认为1多个，0单个
         multiSize:10 默认最多十个
         withdefault:1 (与multifiles配合使用，为1时，有默认模块)
         withpreview:1 预览控件 默认有
         withtext:1 文本输入框显示url 默认无
         params:参数
         url=[多个时格式{id:url,id:url,id:url}]
         attrNm=:默认imageurl
         support:[.mp4,.ogg,.webm]
 * </p>
 */
@Component
public class FileUploaderDirective implements TemplateDirectiveModel {

    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/



    @Override
    public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException {
        environment.getOut().write(genInputer(map));
        if(templateDirectiveBody != null){
            templateDirectiveBody.render(environment.getOut());
        }
    }

    private String genInputer(Map<String,Object> objParams){
        StringBuffer strBuf = new StringBuffer();
        strBuf.append("<div class=\"filesManager\"" + params(objParams) + " >");
        strBuf.append("	   <div class=\"fileinputers\">");
        strBuf.append("    </div>");
        if(objParams.containsKey("multifiles")){
            SimpleScalar scalar = (SimpleScalar)objParams.get("multifiles");
            if(scalar.getAsString().equals("1")){
                strBuf.append("<div class=\"form-group row\">");
                strBuf.append("	<div class=\"col-lg-2 \"></div>");
                strBuf.append("	<div class=\"col-lg-10\">");
                strBuf.append("		<button type=\"button\" tg=\"add\" class=\"mng-tool btn btn-w-m btn-primary\">新增</button>");
                strBuf.append("		<button type=\"button\" tg=\"del\" class=\"mng-tool btn btn-w-m btn-success\">删除</button>");
                strBuf.append("	</div>");
                strBuf.append("</div>");
            }
        }
        strBuf.append("</div>");
        return strBuf.toString();
    }



    public static BeansWrapper getBeansWrapper(){
        BeansWrapper beansWrapper =
                new BeansWrapperBuilder(Configuration.VERSION_2_3_27).build();
        return beansWrapper;
    }

    private String params(Map params){
        if(params == null || params.keySet().isEmpty()){
            return StringUtils.EMPTY;
        }
        StringBuffer strBuf = new StringBuffer();
        params.keySet().forEach(x->{
            strBuf.append(x.toString()).append("=\"").append(params.get(x).toString()).append("\" ");
        });
        return strBuf.toString();
    }

    private String getFromMapWithDefault(Map params,String key,String defaultVal){
        if(params.containsKey(key)){
            return params.get(key).toString();
        }
        return defaultVal;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
